
import { get, post, login_post, del, put } from '../axios/axios.js'


/**
 * 登陆接口
 * @param  {[String]} name     [账户]
 * @param  {[String]} password [密码]
 * @return {[Promise]}          [promise的回调]
 */
const login = function(name, password) {
  return login_post(`login`, {name, password})
}
const logout = function() { // 登出接口
  return post(`v1/logout`)
}
// 注册
// params: {
//name,password,password_confirmation,type
//}
const Register = function(params) {
  return login_post(`register`, params)
}
// 修改密码
// params: {
//	orig_password, password, password_confirmation
//}
const resetPsw = function(params) {
  return post(`v1/my/change-password`, params)
}
// 修改个人信息
// params: {
//	mobile, email
//}
const resetInfo = function(params) {
  return post(`v1/my/save-info`, params)
}
/******************* get相关开始 **************************/
/**
 * 获取题目列表
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             category_id => 分类id (optional)
 *                             type => 题型 (optional)
 *                             difficulty => 难度 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getQuestions = function(params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/question`, params)
}
const getQuestion = function(id) { // 获取单个问题
  return get(`v1/question/${id}`)
}
/**
 * 获取题目分类列表
 * @param  {[num]} pageNo [指定页数]
 * @return {[Promise]}        [promise的回调]
 */
const getQuestClass = function(pageNo) {
  return get(`v1/question-category`, {'page': pageNo})
}

/**
 * 获取标签列表
 * @param  {[num]} pageNo [指定页数]
 * @return {[Promise]}        [promise的回调]
 */
const getLabellist = function(query) {
  return get(`v1/tag`, query)
}
const getAllLabellist = function(type) {
  return get(`v1/tag`, {'no-page': 1, type})
}

/**
 * 获取部门管理
 * @param  {[num]} pageNo [指定页数]
 * @return {[Promise]}        [promise的回调]
 */
const getDepManage = function() {
  return get(`v1/department`, {'no-page': 1})
}

/**
 * 获取用户管理
 * @param  {[num]} pageNo [指定页数]
 * @return {[Promise]}        [promise的回调]
 */
const getUserManage = function(params) {
  return get(`v1/user`, params)
}

/**
 * 获取题目所有分类
 * @return {[Promise]}        [promise的回调]
 */
const getAllQuestClass = function() {
  return get(`v1/question-category`, {'no-page': 1})
}
/**
 * 获取试卷列表
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             category_id => 分类id (optional)
 *                             type => 题型 (optional)
 *                             difficulty => 难度 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getTests = function(params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/exam`, params)
}
const getTest = function(id) { // 获取单个试卷
  return get(`v1/exam/${id}`)
}
/**
 * 获取试卷分类列表
 * @param  {[num]} pageNo [指定页数]
 * @return {[Promise]}        [promise的回调]
 */
const getTestClass = function(pageNo) {
  return get(`v1/exam-category`, {'page': pageNo})
}
/**
 * 获取试卷所有分类
 * @return {[Promise]}        [promise的回调]
 */
const getAllTestClass = function() {
  return get(`v1/exam-category`, {'no-page': 1})
}
/**
 * 获取考试列表
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             category_id => 分类id (optional)
 *                             type => 题型 (optional)
 *                             keyword => 关键词 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getExams = function(params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/test`, params)
}
/**
 * 获取考试预设名列表
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             keyword => 关键词 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getExamPrenames = function(params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/exam-name`, params)
}
/**
 * 获取个人中心考试列表
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             keyword => 关键词 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getMyExams = function(params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/my/test`, params)
}
/**
 * 考试资格询问
 * @param  {[Number]} id [考试的id]
 * @return {[Promise]}        [promise的回调]
 */
const is_startExam = function(id) {
  return get(`v1/my/check-test/${id}`)
}
/**
 * 获取个人考试或练习记录
 * @param  {[Number]} id [考试或练习的id]
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             keyword => 关键词 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getMyExamDetail = function(id, params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/test-user/${id}`, params)
}
/**
 * 获取当前考试的人员
 * @param  {[Number]} id [考试或练习的id]
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             page => 页码
 *                             keyword => 关键词 (optional)
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const getExamAssign = function(id, params) {
  if (!params.page && params.page != 0) {
    throw Error(`缺少参数page`)
  }
  return get(`v1/test/assign/${id}`, params)
}
/******************* get相关结束 **************************/

/******************* post相关开始 **************************/

//报表更新
const toUpdatehome = function() {
  return post(`v1/report/build`, {'': ''})
 }
/**
 * 新增题目分类
 * @param  {[String]} name [分类名称]
 * @return {[Promise]}        [promise的回调]
 */
const addQuestClass = function(name) {
  return post(`v1/question-category`, {'name': name})
}
/**
 * 新增标签列表
 * @param  {[String]} name [分类名称]
 * @return {[Promise]}        [promise的回调]
 */
const addLabellist = function(params) {
  return post(`v1/tag`, params)
}
/**
 * 新增考试预设名
 * @param  {[String]} name [分类名称]
 * @return {[Promise]}        [promise的回调]
 */
const addExamPrename = function(name) {
  return post(`v1/exam-name`, {'name': name})
}
/**
 * 新增试卷分类
 * @param  {[String]} name [分类名称]
 * @return {[Promise]}        [promise的回调]
 */
const addTestClass = function(name) {
  return post(`v1/exam-category`, {'name': name})
}
/**
 * 新增题目
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             difficulty => 难度
 *                             type => 类型
 *                             question_category_id => 分类的id
 *                             title => 题干
 *                             note => 解析
 *                             content => 回答相关
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const addQuestion = function(params) {
  return post(`v1/question`, params)
}
/**
 * 新增试卷
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             name => 试卷名称
 *                             exam_category_id => 试卷类别
 *                             type => 试卷生成类型
 *                             question => 自由选择的题目
 *                             gtype => 随机生成的规则
 *                             questionCategory => 随机生成题型
 *                             submit => 提交的类型
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const addTest = function(params) {
  return post(`v1/exam`, params)
}
/**
 * 新增考试
 * @param  {[Object]} params [
 *                             相关请求参数
 *                             暂无
 *                           ]
 * @return {[Promise]}        [promise的回调]
 */
const addExam = function(params) {
  return post(`v1/test`, params)
}


/**
 * 获取考试的试卷题目并开考
 * @param  {[Number]} id [考试的id]
 * @return {[Promise]}        [promise的回调]
 */
const startExam = function(id) {
  return post(`v1/my/start-test/${id}`)
}
/**
 * 获取考试的试卷题目详情
 * @param  {[Number]} id [考试的id]
 * @param  {[Boolean]} checkError [是否包含错题答案]
 * @return {[Promise]}        [promise的回调]
 */
const getExamDetail = function(id, checkError) {
  if (checkError) {
    return get(`v1/test-user/detail/${id}`)
  } else {
    return get(`v1/exam/detail/${id}`)
  }
}
/**
 * 提交考试试卷
 * @param  {[Number]} id [考试的id]
 * @param  {[Object]} params [{answers: 答案JSON数组}]
 * @return {[Promise]}        [promise的回调]
 */
const submitExam = function(id, params) {
  return post(`v1/my/submit-answer/${id}`, params)
}
/******************* post相关结束 **************************/

/******************* delete相关开始 删除操作统一传入id 返回promise**************************/
// 删除题目分类
const delQuestClass = function(id) {
  return del(`v1/question-category`, id)
}
/* 删除部门 */
const DepDel = (id)=>{
	return del(`v1/department`,id)
}
// 删除标签
const delLabellist = function(id) {
  return del(`v1/tag`, id)
}
// 删除考试预设名
const delExamPrename = function(id) {
  return del(`v1/exam-name`, id)
}
// 删除题目
const delQuestion = function(id) {
  return del(`v1/question`, id)
}
// 删除试卷
const delTest = function(id) {
  return del(`v1/exam`, id)
}
// 删除试卷分类
const delTestClass = function(id) {
  return del(`v1/exam-category`, id)
}
// 删除考试
const delExam = function(id) {
  return del(`v1/test`, id)
}

const delUser = function(id) {
  return del(`v1/user`, id)
}
/******************* delete相关结束 **************************/

/******************* put相关开始 更新操作统一传入id,及要改变的key-value(对象结构) 返回promise**************************/
// params 可参考对应post相关的params
// 更新题目分类
const updateQuestClass = function(id, params = {}) {
  return put(`v1/question-category`, id, params)
}
// 更新标签
const updateLabellist = function(id, params = {}) {
  return put(`v1/tag`, id, params)
}
// 更新考试预设名
const updateExamPrename = function(id, params = {}) {
  return put(`v1/exam-name`, id, params)
}
// 更新考试列表
const updateExamlist = function(id, params = {}) {
  return put(`v1/exam-category`, id, params)
}
// 更新题目
const updateQuestion = function(id, params = {}) {
  return put(`v1/question`, id, params)
}
// 更新试卷
const updateTest = function(id, params) {
  return put(`v1/exam`, id, params)
}
// 更新试卷分类
const updateTestClass = function(id, params = {}) {
  return put(`v1/exam-category`, id, params)
}
// 更新考试
const updateExam = function(id, params = {}) {
  return put(`v1/test`, id, params)
}
/******************* put相关结束 **************************/


/* 新增部门
 */

const DepAdd = (params)=>{
		return post(`v1/department`,params)
}

/* 新增人员
 */

const DepUserAdd = (params)=>{
		return post(`v1/user`,params)
}

export default {
  // 登陆
  login,
  // 登出
  logout,
  //注册
  Register,
  // 修改密码
  resetPsw,
  //更改个人信息
  resetInfo,
  // 题库
  getQuestions,
  getQuestion,
  getQuestClass,
  getAllQuestClass,

  getLabellist,
  getAllLabellist,

  delQuestClass,
  delQuestion,
  delLabellist,

  // 试卷
  getTests,
  getTest,
  getTestClass,
  getAllTestClass,

  //管理
  getDepManage,
  getUserManage,
  delTest,
  delTestClass,

  // 考试
  getExams,
  delExam,
  getExamAssign,
  // 考试预设名
  getExamPrenames,
  delExamPrename,

  // 个人考试相关
  getMyExams,
  is_startExam,
  startExam,
  submitExam,
  getExamDetail,
  getMyExamDetail,
  // 添加表单
  addQuestClass,
  addQuestion,

  addLabellist,

  addExamPrename,

  addTest,
  addTestClass,
  addExam,
  // 更新表单
  updateQuestClass,
  updateLabellist,
  updateExamPrename,
  updateExamlist,
  updateQuestion,
  updateTest,
  updateTestClass,
  updateExam,
	DepAdd,
	DepDel,
	DepUserAdd,
  toUpdatehome,
  delUser
}
